package com.yisa.person.utils;

import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import sun.misc.BASE64Decoder;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.List;

@Component
public class HutoolUtil {
    @Value("${hutool.url}")
    private String url;
    public String post(List<Long> personIds) {
        JSONObject param = JSONUtil.createObj();
        param.put("PersonIDs", personIds);
        String result = HttpUtil.post(url, param.toString());
      
        return result;
    }

    /**
     * 根据身份证计算性别
     * @param idNumber 身份证号码
     * @return 识别为女性 返回1  识别为男性返回2
     * @throws IllegalArgumentException
     */
    public static Integer judgeGender(String idNumber)  {
        if (idNumber.length() != 18 && idNumber.length() != 15) {
            return 0;
        }
        int gender = 0;
        if (idNumber.length() == 18) {
            //如果身份证号18位，取身份证号倒数第二位
            char c = idNumber.charAt(idNumber.length() - 2);
            gender = Integer.parseInt(String.valueOf(c));
        } else {
            //如果身份证号15位，取身份证号最后一位
            char c = idNumber.charAt(idNumber.length() - 1);
            gender = Integer.parseInt(String.valueOf(c));
        }
        if (gender % 2 == 1) {
            //识别为男
            return 1;
        } else {
            //识别为女性
            return 2;
        }
    }

    /**
     * base64转图片
     * @param base64str base64码
     * @param savePath 图片路径
     * @return
     */
    public boolean generateImage(String base64str, String savePath) {

        File file = new File(savePath);
        if(!file.getParentFile().exists()){
            //如果不存在就创建文件夹
            file.getParentFile().mkdirs();
        }

        //对字节数组字符串进行Base64解码并生成图片
        if (base64str == null) {
            return false;
        }
        BASE64Decoder decoder = new BASE64Decoder();

        try ( OutputStream out = new FileOutputStream(savePath)){
            //Base64解码
            byte[] b = decoder.decodeBuffer(base64str);
            for (int i = 0; i < b.length; ++i) {
                //调整异常数据
                if (b[i] < 0) {
                    b[i] += 256;
                }
            }
            //生成jpeg图片

            out.write(b);
            return true;
        } catch (Exception e) {
            return false;
        }
    }
}
